home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Gekikoh Dennoh Club 1
/
Gekikoh Dennoh Club Vol. 1 (Japan).7z
/
Gekikoh Dennoh Club Vol. 1 (Japan) (Track 1).bin
/
kowin
/
archive
/
apl
/
gview120.lzh
/
gviewsrc.lzh
/
mag_load.c
< prev
next >
Wrap
C/C++ Source or Header
|
1995-02-13
|
2KB
|
69 lines
/* Copyright 1992 H.Ogasawara (COR.) */
#include <corlib.h>
#include <sys_doslib.h>
#include "gview.h"
#define MAGLOADER "mag.r"
static int sizex, sizey;
static unsigned char com[1024];
static int color;
static unsigned char *mag_palet;
static
size_check( fname )
char *fname;
{
int fn;
unsigned char *p;
if( (fn= OPEN( fname, 0 )) >= 0 ){
READ( fn, p= com, 1024 );
CLOSE( fn );
if( strncmp( p, "MAKI02 ", 8 ) ){
GV_Err( "magフォーマットが違います" );
return FALSE;
}
for( com[1023]= 0x1a ; *p != 0x1a ; p++ );
*p++= '\0';
for( com[1023]= 0 ; *p != 0x00 ; p++ );
mag_palet= p+32;
p++; /* skip ヘッダ先頭 */
p++; /* 機種コード */
p++; /* 機種依存フラグ */
color= *p++ & 128; /* スクリーンモード */
sizex= (p[1]<<8)+*p; p+= 2; /* 開始X */
sizey= (p[1]<<8)+*p; p+= 2; /* 開始Y */
sizex= (p[1]<<8)+*p - sizex +1; p+= 2; /* 終了X */
sizey= (p[1]<<8)+*p - sizey +1; p+= 2; /* 終了Y */
return TRUE;
}
GV_Err( "magオープンできません" );
return FALSE;
}
GVIEW *
GV_Load_Mag( fname )
char *fname;
{
if( size_check( fname ) ){
GVIEW *gp;
if( !(gp= GV_Alloc( sizex, sizey, color ?
WindowAttrGraphic256 :
WindowAttrGraphic16,
fname, com+8, 0 )) ){
GV_Err( "メモリが足りません" );
return NULL;
}
if( GV_VramGetExec( MAGLOADER, fname, gp ) ){
MFREE( gp );
GV_Err2( MAGLOADER, "実行できませんでした" );
return NULL;
}
memcpy( gp->base_palet, mag_palet, GV_PaletSize(gp->color)*3 );
GV_BaseToPalet( gp );
return gp;
}
return NULL;
}